package org.zjt.book

/**
  * 匹配模式：match
  */
object MatchTest2 extends App {

  var var1:Any = "string"

  /** 1、类型匹配 + 守卫  + 内容匹配  */
  var1 match {

    //守卫
    case a:String if a.contains("s") => println("该字符串包括s:"+a)
    case a:String if a.contains("r") => println("该字符串包括r:"+a)

    //类型匹配
    case a:Int => println("该Int包括r:"+a)

    //内容匹配
    case "" => println("空字符串")

    //默认匹配
    case _ => println("未知格式")
  }



  var var2:Any = 122222L

  /** 返回匹配的结果 */
  var result = var2 match {
    case a:Int => a
    case Long => 2123   /** ps: var2为Long.Class实例时候，执行   */
    case a:String => a.toInt
    case a => println(a.getClass) ; 0
  }

  println(result)


  // TODO: 柯里赋值
  var (x,y) = (2,3)
  println(x+"  " +y)


  // TODO: 数组赋值
  var Array(first,second,_*) = Array(1,2,3,4,3,3)
  println(first+"  " +second)


  // TODO: /% 返回商和余数
  var (q,r) = BigInt(10) /% 3  // q=商   r=余数
  println(q+"  " +r)



  /** 得到value为空字符串("")的map元素 */
  for ((k,"") <- Map(1->"zhang",2->"wang",3->"li",4->"zhao",5->""))
    println(k)


  /**case的函数中置： { case中置函数 }  */
  var var3 = Array(1,32,4,4,3,2,1,4,5).map{
    case 1 => 10
    case 2 => 12
    case a => a
  }.mkString(",")
  println(var3)



  /** Some()将对象包装，将查看对象是否存在   */
  println( Some("wqwq").isEmpty )

  println( None )





  var hdfsLogHandler = () => {
    println("-----------hdfsLogHandler------------")
  }
  hdfsLogHandler()



  def add2 = new Function1[Int,Int]{
    def apply(x:Int):Int = x+1;
  }



}
